#ifndef __STDIO
    #include <stdio.h>
    #define __STDIO
#endif  /* STDIO */

#ifndef __STDLIB
    #include <stdlib.h>
    #define __STDLIB
#endif  /* STDLIB */

#include <readline/readline.h>
#include <readline/history.h>

#define I_NOME 50
#define I_FUNC 50

/**
 * Estrutura de dados do formulario
 * @param estrutura de dados do formulario
 * @param saida string apresentada ao utilizador
 * @param entrada string para guardar respostas utilizador
 */
typedef struct sFormulario{
    char *nome;
    char *saida;
    char *entrada;
}Formulario;

/**
 * Estrtura de um comando.
 * @param nome String que contem o nome do comando.
 * @param n_argumetnos Numero de argumentos que o comando recebe.
 * @param descricao Descricao do comando.
 */
typedef struct sComando{
    char *nome;
    short int n_argumentos;
    char *descricao;
}Comando;

/**
 * Estrutura sobre qual o modulo interface trabalha.
 * Inclui todas as outras estruturas dos módulos.
 * @param nome Nome do utilizador ligado.
 * @param cmd Array de comandos.
 * @param Formulario Array de formularios.
 * @param func Nome da funcao a executar.
 * @param arg1 Primeiro argumento da funcao a executar.
 * @param arg2 Segundo argumento da funcao a executar.
 * @param arg3 Te rceiro argumento da funcao a executar.
 */
typedef struct sInterface_Estrut{
    char *nome;

    Comando *cmd;
    int c_dim;
    Formulario *form;
    Formulario *form_2;
    int f_dim;
    int f2_dim;

    long long int valor;
    char *func;
    char *arg1;
    char *arg2;
    char *arg3;
    int arg_num;
    } Interface_Estrut;


void imprime_interface_simples(char *str);
